package com.zjb.demo.system.mapper;

import com.mybatisflex.core.BaseMapper;
import com.mybatisflex.core.query.QueryChain;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.update.UpdateChain;
import com.zjb.demo.system.domain.SysDictData;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

import static com.zjb.demo.system.domain.table.SysDictDataTableDef.SYS_DICT_DATA;

/**
 * @author 庄佳彬
 * @since 2023/12/28 09:18
 */
@Mapper
public interface SysDictDataMapper extends BaseMapper<SysDictData> {

    /**
     * 根据字典类型选择字典数据列表
     *
     * @param dictType 字典类型
     * @return 字典数据列表
     */
    default List<SysDictData> selectDictDataByType(String dictType) {
        var query = QueryWrapper.create()
                .select(SYS_DICT_DATA.ALL_COLUMNS)
                .from(SYS_DICT_DATA)
                .where(SYS_DICT_DATA.DICT_TYPE.eq(dictType))
                .and(SYS_DICT_DATA.STATUS.eq(0))
                .orderBy(SYS_DICT_DATA.DICT_SORT.asc());
        return selectListByQuery(query);
    }


    /**
     * 更新字典类型
     *
     * @param oldType 旧的类型
     * @param newType 新的类型
     */
    default void updateDictType(String oldType, String newType) {
        UpdateChain.of(this)
                .set(SYS_DICT_DATA.DICT_TYPE, newType)
                .where(SYS_DICT_DATA.DICT_TYPE.eq(oldType))
                .update();
    }


    /**
     * 判断指定字典类型是否存在。
     *
     * @param dictType 字典类型
     * @return 存在返回true，否则返回false
     */
    default boolean existsByType(String dictType) {
        return QueryChain.of(this)
                .select(SYS_DICT_DATA.DICT_CODE)
                .from(SYS_DICT_DATA)
                .where(SYS_DICT_DATA.DICT_TYPE.eq(dictType))
                .exists();
    }

    /**
     * 选择字典数据列表
     *
     * @return SysDictData对象的列表
     */
    default List<SysDictData> selectDictDataList() {
        return QueryChain.of(this)
                .select(SYS_DICT_DATA.ALL_COLUMNS)
                .from(SYS_DICT_DATA)
                .where(SYS_DICT_DATA.STATUS.eq(0))
                .orderBy(SYS_DICT_DATA.DICT_SORT.asc())
                .list();
    }

}
